package com.cw.realtime.common
package util

import io.circe.syntax.EncoderOps
import io.circe.{Json, JsonObject}

object CirceUtil {

  implicit class JsonObjOps(j: JsonObject) {
    def update(key: String, value: Json): JsonObject = {
      def aux(obj: JsonObject): Json = {
        obj.toMap.map {
          case (k, json) if k == key =>
            k -> value // 找到键
          case (k, json) if json.isObject =>
            k -> aux(json.asObject.get) //对象则递归寻找
          case kv => kv // 否则保持原样
        }
      }.asJson

      aux(j).asObject.get
    }


    /**
     * 浅层的拼接，如果有相同的键，保留右侧对应的值
     * @param jsonObject
     * @return
     */
    def ++(jsonObject: JsonObject): Json = {
      (j.toMap ++ jsonObject.toMap).asJson
    }
  }


}
